Web3.j Corda
参考
手順
1. curl でweb3jをdownload
curl -L https://getcorda.web3j.io | bash
PATHを通す
https://gyazo.com/005dcacf0d0bf4b43f823ce01e7ee0f8
2. web3jを使ってCordappの雛形を作成
web3j-corda new -o 作成するディレクトリ名 -n Cordapp名 -p パッケージ名 で雛形作成
例) web3j-corda new -o web3j-iou -n IOU -p com.example
https://gyazo.com/587ce2827d84b2f88c09d4c218f913e8
3. IntelliJで開いて見てみる
プロジェクト名のState, Contract, Flowの雛形 ができている
Cordappと通信するためのclientも空の状態の雛形が作成されている
https://gyazo.com/29ddaec8271fc9885957098b5cfffd2f
4. Cordappを作成
State, Contract, Flowの雛形からCordappを書く
ここではexample-cordappのstate, contract, flowをコピペする
5. Client Wrapperの雛形自動生成
プロジェクト作成した時にからのclientは作成されているが、Cordappをupdateしたので再度生成しなくてはならない
./gradle build でbuild
etaro.icon > javax.annotaion.Generatedでbuildエラー出る気がする
client 配下の srcディレクトリを削除する
web3j-corda generateコマンドを実行してClient Wrapperを作成できる
各種オプションも設定する
web3j-corda generate -d ~/path-to/web3j-iou/ -o ~/path-to/web3j-iou/clients -p com.example.client
実行例) web3j-corda generate -d ./web3j-iou/ -o ./web3j-iou/clients -p com.example.client
https://gyazo.com/017d753500e64925f4b805cae13bcb6a
https://gyazo.com/31278c2d62d4f7d3e5d5f6e85ca9243e
上記のような感じで実装したFlowやStateに対応したWrapperが自動生成される
また以下のような形でtestコードも実装したflowに対応したものの雛形が自動生成される
https://gyazo.com/1a39211cb554ccaed057844600a88acc
デフォルトのテストコードはnode一台になっているので、Cordappによっては他のnodeやnotaryを追加してテストする
Testを実行すると docker containerが
Notary, NodeA, NodeA Braid server, NodeB, NodeB Braid server, and Network Map
分の6台立ち上がってテストが実行される
6. ClientからCordaノードへの通信
以下のようにCorda Nodeとの通信を記述する
code:kotlin
// Corda Nodeとの接続
val corda = Corda.build(service)
// queryを投げる
// Networkに参加しているNode一覧をリクエスト
val nodes = corda.api.network.nodes.findAll()
// Nodeで動作しているCordapp情報をリクエスト
val corDapps = corda.api.corDapps.findAll()
// Corda APIを使用したTX実行
// Initialise the parameters of the flow
val params = InitiatorParameters("$1", "O=PartyA, L=London, C=GB", false)
val issue = corda.api
.corDapps.findById("obligation")
.flows.findById("issue-obligation")
// Type-conversions with potential runtime exception!
var signedTx = issue.start(params).convert<SignedTransaction>()
// Web3.j Cordaで作成したWrapperをしようしたTX実行
// Initialise the parameters of the flow
val params = InitiatorParameters("$1", "O=PartyA, L=London, C=GB", false)
// Start the flow with typed parameters and response
val signedTx = Obligation.load(corda.service).flows.issue.start(parameters)